// 控制页面权限的文件
import router from '@/router'
import store from '@/store'
import nprogress from 'nprogress'
import 'nprogress/nprogress.css'

const Whitelist = ['/login', '/404']
// 全局前置守卫
router.beforeEach(async (to, from, next) => {
  nprogress.start()
  // 首先判断有没有token
  if (store.getters.token) {
    // 如果要访问登录页
    if (to.path === '/login') {
      // 跳转到主页
      router.push('/')
    } else {
      if (!store.state.user.Userinfo.userId) {
        // 说明没有用户资料，获取资料
        const { roles } = await store.dispatch('user/getUserinfo')
        const routers = await store.dispatch('permission/filterRoutes', roles.menus)
        // routes就是筛选得到的动态路由
        // 动态路由 添加到 路由表中 默认的路由表 只有静态路由 没有动态路由
        router.addRoutes([...routers, { path: '*', redirect: '/404', hidden: true }])
        // 进行路由跳转,这里使用to.path是因为如果直接跳转的话，此时addRoutes还没有执行完，会导致出现一些问题
        next(to.path)
      } else {
        next()
      }
    }
  } else {
    // 没有token
    if (Whitelist.indexOf(to.path) >= 0) {
      // 在白名单中，可以直接访问
      next()
    } else {
      // 跳转到登录界面
      router.push('/login')

    }
  }
  nprogress.done()
})

// 全局后置守卫
router.afterEach(() => {
  nprogress.done()
})